package org.lc.stk.security.exception;

import org.springframework.security.core.AuthenticationException;

/**
 * JWT认证异常
 *
 * <p>用于处理JWT认证过程中的所有异常情况。继承自Spring Security的{@link AuthenticationException},
 * 使其能够被Spring Security的异常处理机制自动处理。</p>
 *
 * <p>异常场景包括:</p>
 * <ul>
 *   <li>JWT令牌格式错误</li>
 *   <li>签名验证失败</li>
 *   <li>令牌过期</li>
 *   <li>令牌被篡改</li>
 *   <li>令牌中的用户信息无效</li>
 * </ul>
 *
 * <p>异常处理建议:</p>
 * <ul>
 *   <li>在{@link org.springframework.security.web.AuthenticationEntryPoint}中统一处理</li>
 *   <li>记录详细的错误日志以便问题排查</li>
 *   <li>向客户端返回适当的错误信息</li>
 *   <li>考虑令牌刷新机制</li>
 * </ul>
 *
 * <p>使用示例:</p>
 * <pre>
 * try {
 *     // JWT验证逻辑
 *     if (!jwtUtil.validateToken(token)) {
 *         throw new JwtAuthenticationException("Invalid JWT token");
 *     }
 * } catch (ExpiredJwtException e) {
 *     throw new JwtAuthenticationException("JWT token has expired", e);
 * }
 * </pre>
 */
public class JwtAuthenticationException extends AuthenticationException {
    
    /**
     * 使用指定的错误消息创建JWT认证异常
     *
     * @param msg 详细的错误消息
     */
    public JwtAuthenticationException(String msg) {
        super(msg);
    }

    /**
     * 使用指定的错误消息和原因创建JWT认证异常
     *
     * @param msg 详细的错误消息
     * @param cause 导致此异常的原始异常
     */
    public JwtAuthenticationException(String msg, Throwable cause) {
        super(msg, cause);
    }
}